package com.qixin.util.string;

import org.apache.commons.lang3.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * @author 张子艺
 * @date 2017年1月19日 下午3:12:17
 * @version 1.0
 * @description 正则表达式工具
 *
 */
public class RegexUtil {
	/**
	 * email
	 */
	private static final String REGEX_EMAIL="\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";
	/**
	 * 手机号
	 */
	private static final String REGEX_DOMESTIC_MOBILE="0?(13|14|15|17|18)[0-9]{9}";
	
	/**
	 * 短信验证码
	 */
	private static final String REGEX_SMS_CODE="[0-9]{4,6}";
	
	/**
	 * 图形验证码
	 */
	private static final String REGEX_IMAGE_CODE="[0-9a-zA-Z]{4,8}";
	/**
	 * 密码（6到30位，字母数字字符至少两种的组合）
	 */
//	private static final  String REGEX_PASSWORD="(?!^\\d+$)(?!^[a-zA-Z]+$)(?!^[_#@]+$).{6,30}";
	private static final  String REGEX_PASSWORD="[^\\s]{6,20}";
	
	/**
	 * 用于存储数据的KEY
	 */
	private static final  String REGEX_DB_KEY="[0-9a-zA-Z\\-]{1,50}";
	
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年1月19日 下午3:08:29
	 * @version 1.0
	 * @description 公用的使用正则表达式校验的方法
	 *
	 * @param regex
	 * @param str
	 * @return
	 */
	public static boolean regex(String regex ,String str){
		Pattern pattern=Pattern.compile(regex);
		Matcher matcher=pattern.matcher(str);
		return matcher.matches();
	}
	
	
	
	public static String getRegexPartStr(String str,String regex){
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(str);
		boolean result = matcher.find();
		if(result){
			return matcher.group(0);
		}
		return null;
	}
	
	
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年1月19日 下午3:09:05
	 * @version 1.0
	 * @description 判断是否是email
	 *
	 * @param email
	 * @return
	 */
	public static boolean isEmail(String email){
		if(StringUtils.isBlank(email)){
			return false;
		}
		return regex(REGEX_EMAIL, email);
	}
	
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年1月19日 下午3:11:05
	 * @version 1.0
	 * @description 判断是否是国内电话号码
	 *
	 * @param mobile
	 * @return
	 */
	public static boolean isDomesticMobile(String mobile){
		if(StringUtils.isBlank(mobile)){
			return false;
		}
		return regex(REGEX_DOMESTIC_MOBILE, mobile);
	}
	
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年2月16日 下午2:52:09
	 * @version 1.0
	 * @description 判断是否是短信验证码
	 *
	 * @param smsCode
	 * @return
	 */
	public static boolean isSmsCode(String smsCode){
		if(StringUtils.isBlank(smsCode)){
			return false;
		}
		return regex(REGEX_SMS_CODE, smsCode);
	}
	
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年2月16日 下午3:33:53
	 * @version 1.0
	 * @description 判断是否是图形验证码
	 *
	 * @param imageCode
	 * @return
	 */
	public static boolean isImageCode(String imageCode){
		if(StringUtils.isBlank(imageCode)){
			return false;
		}
		return regex(REGEX_IMAGE_CODE, imageCode);
	}
	
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年2月16日 下午3:20:08
	 * @version 1.0
	 * @description 判断是否是符合要求的密码
	 *
	 * @param password
	 * @return
	 */
	public static boolean isPassword(String password){
		if(StringUtils.isBlank(password)){
			return false;
		}
		return regex(REGEX_PASSWORD, password);
	}
	
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年2月16日 下午3:36:51
	 * @version 1.0
	 * @description 判断是否是存储redis等db的key
	 *
	 * @param dbKey
	 * @return
	 */
	public static boolean isDBKey(String dbKey){
		if(StringUtils.isBlank(dbKey)){
			return false;
		}
		return regex(REGEX_DB_KEY, dbKey);
	}
	
//	public static void main(String[] args) {
////		String regex="^((https?|imaps?|http?)://[a-zA-Z0-1\\-]+\\.gdfcx\\.net.*)|((https?|imaps?|http?)://localhost.*)";
////		String str="http://alpha-www.baidu.net:8080/aaaa";
////		System.out.println(regex(regex, str));
////		System.out.println(isPassword("<script></script>"));
//		System.out.println(regex("^(https?|imaps?|http?)://[a-zA-Z0-1\\-]+\\.shejijia\\.com.*", "ST-31-cnfOHPgTSVoeZQdDRsdC-cas.shejijia.com"));
//	}
	
}
